{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 第二十四讲：马尔科夫矩阵、傅里叶级数\n",
    "\n",
    "## 马尔科夫矩阵\n",
    "\n",
    "马尔科夫矩阵（Markov matrix）是指具有以下两个特性的矩阵：\n",
    "\n",
    "1. 矩阵中的所有元素**大于等于**$0$；（因为马尔科夫矩阵与概率有关，而概率是非负的。）\n",
    "2. 每一列的元素之和为$1$\n",
    "\n",
    "对于马尔科夫矩阵，我们关心幂运算过程中的稳态（steady state）。与上一讲不同，指数矩阵关系特征值是否为$0$，而幂运算要达到稳态需要特征值为$1$。\n",
    "\n",
    "根据上面两条性质，我们可以得出两个推论：\n",
    "\n",
    "1. 马尔科夫矩阵必有特征值为$1$；\n",
    "2. 其他的特征值的绝对值皆小于$1$。\n",
    "\n",
    "使用第二十二讲中得到的公式进行幂运算$u_k=A^ku_0=S\\Lambda^kS^{-1}u_0=S\\Lambda^kS^{-1}Sc=S\\Lambda^kc=c_1\\lambda_1^kx_1+c_2\\lambda_2^kx_2+\\cdots+c_n\\lambda_n^kx_n$，从这个公式很容易看出幂运算的稳态。比如我们取$\\lambda_1=1$，其他的特征值绝对值均小于$1$，于是在经过$k$次迭代，随着时间的推移，其他项都趋近于$0$，于是在$k\\to\\infty$时，有稳态$u_k=c_1x_1$，这也就是初始条件$u_0$的第$1$个分量。\n",
    "\n",
    "我们来证明第一个推论，取$A=\\begin{bmatrix}0.1&0.01&0.3\\\\0.2&0.99&0.3\\\\0.7&0&0.4\\end{bmatrix}$，则$A-I=\\begin{bmatrix}-0.9&0.01&0.3\\\\0.2&-0.01&0.3\\\\0.7&0&-0.6\\end{bmatrix}$。观察$A-I$易知其列向量中元素之和均为$0$，因为马尔科夫矩阵的性质就是各列向量元素之和为$1$，现在我们从每一列中减去了$1$，所以这是很自然的结果。而如果列向量中元素和为$0$，则矩阵的任意行都可以用“零减去其他行之和”表示出来，即该矩阵的行向量线性相关。\n",
    "\n",
    "用以前学过的子空间的知识描述，当$n$阶方阵各列向量元素之和皆为$1$时，则有$\\begin{bmatrix}1\\\\1\\\\\\vdots\\\\1\\end{bmatrix}$在矩阵$A-I$左零空间中，即$(A-I)^T$行向量线性相关。而$A$特征值$1$所对应的特征向量将在$A-I$的零空间中，因为$Ax=x\\rightarrow(A-I)x=0$。\n",
    "\n",
    "另外，特征值具有这样一个性质：矩阵与其转置的特征值相同。因为我们在行列式一讲了解了性质10，矩阵与其转置的行列式相同，那么如果$\\det(A-\\lambda I)=0$，则有$\\det(A-\\lambda I)^T=0$，根据矩阵转置的性质有$\\det(A^T-\\lambda I^T)=0$，即$\\det(A^T-\\lambda I)=0$。这正是$A^T$特征值的计算式。\n",
    "\n",
    "然后计算特征值$\\lambda_1=1$所对应的特征向量，$(A-I)x_1=0$，得出$x_1=\\begin{bmatrix}0.6\\\\33\\\\0.7\\end{bmatrix}$，特征向量中的元素皆为正。\n",
    "\n",
    "接下来介绍马尔科夫矩阵的应用，我们用麻省和加州这两个州的人口迁移为例：\n",
    "\n",
    "$\\begin{bmatrix}u_{cal}\\\\u_{mass}\\end{bmatrix}_{k+1}\\begin{bmatrix}0.9&0.2\\\\0.1&0.8\\end{bmatrix}\\begin{bmatrix}u_{cal}\\\\u_{mass}\\end{bmatrix}_k$，元素非负，列和为一。这个式子表示每年有$10%$的人口从加州迁往麻省，同时有$20%$的人口从麻省迁往加州。注意使用马尔科夫矩阵的前提条件是随着时间的推移，矩阵始终不变。\n",
    "\n",
    "设初始情况$\\begin{bmatrix}u_{cal}\\\\u_{mass}\\end{bmatrix}_0=\\begin{bmatrix}0\\\\1000\\end{bmatrix}$，我们先来看第一次迁徙后人口的变化情况：$\\begin{bmatrix}u_{cal}\\\\u_{mass}\\end{bmatrix}_1=\\begin{bmatrix}0.9&0.2\\\\0.1&0.8\\end{bmatrix}\\begin{bmatrix}0\\\\1000\\end{bmatrix}=\\begin{bmatrix}200\\\\800\\end{bmatrix}$，随着时间的推移，会有越来越多的麻省人迁往加州，而同时又会有部分加州人迁往麻省。\n",
    "\n",
    "计算特征值：我们知道马尔科夫矩阵的一个特征值为$\\lambda_1=1$，则另一个特征值可以直接从迹算出$\\lambda_2=0.7$。\n",
    "\n",
    "计算特征向量：带入$\\lambda_1=1$求$A-I$的零空间有$\\begin{bmatrix}-0.1&0.2\\\\0.1&-0.2\\end{bmatrix}$，则$x_1=\\begin{bmatrix}2\\\\1\\end{bmatrix}$，此时我们已经可以得出无穷步后稳态下的结果了。$u_{\\infty}=c_1\\begin{bmatrix}2\\\\1\\end{bmatrix}$且人口总数始终为$1000$，则$c_1=\\frac{1000}{3}$，稳态时$\\begin{bmatrix}u_{cal}\\\\u_{mass}\\end{bmatrix}_{\\infty}=\\begin{bmatrix}\\frac{2000}{3}\\\\\\frac{1000}{3}\\end{bmatrix}$。注意到特征值为$1$的特征向量元素皆为正。\n",
    "\n",
    "为了求每一步的结果，我们必须解出所有特征向量。带入$\\lambda_2=0.7$求$A-0.7I$的零空间有$\\begin{bmatrix}0.2&0.2\\\\0.1&0.1\\end{bmatrix}$，则$x_2=\\begin{bmatrix}-1\\\\1\\end{bmatrix}$。\n",
    "\n",
    "通过$u_0$解出$c_1, c_2$，$u_k=c_11^k\\begin{bmatrix}2\\\\1\\end{bmatrix}+c_20.7^k\\begin{bmatrix}-1\\\\1\\end{bmatrix}$，带入$k=0$得$u_0=\\begin{bmatrix}0\\\\1000\\end{bmatrix}=c_1\\begin{bmatrix}2\\\\1\\end{bmatrix}+c_2\\begin{bmatrix}-1\\\\1\\end{bmatrix}$，解出$c_1=\\frac{1000}{3}, c_2=\\frac{2000}{3}$。\n",
    "\n",
    "另外，有时人们更喜欢用行向量，此时将要使用行向量乘以矩阵，其行向量各分量之和为$1$。\n",
    "\n",
    "## 傅里叶级数\n",
    "\n",
    "在介绍傅里叶级数（Fourier series）之前，先来回顾一下投影。\n",
    "\n",
    "设$q_1,q_2,\\cdots q_n$为一组标准正交基，则向量$v$在该标准正交基上的展开为$v=x_1q_1+x_2q_2+\\cdots+x_nq_n$，此时我们想要得到各系数$x_i$的值。比如求$x_1$的值，我们自然想要消掉除$x_1q_1$外的其他项，这时只需要等式两边同乘以$q_1^T$，因为的$q_i$向量相互正交且长度为$1$，则$q_i^Tq_j=0, q_i^2=1$所以原式变为$q_1^Tv=x_1$。\n",
    "\n",
    "写为矩阵形式有$\\Bigg[q_1\\ q_2\\ \\cdots\\ q_n\\Bigg]\\begin{bmatrix}x_1\\\\x_2\\\\\\vdots\\\\x_n\\end{bmatrix}=v$，即$Qx=v$。所以有$x=Q^{-1}v$，而在第十七讲我们了解到标准正交基有$Q^T=Q^{-1}$，所以我们不需要计算逆矩阵可直接得出$x=Q^Tv$。此时对于$x$的每一个分量有$x_i=q_i^Tv$。\n",
    "\n",
    "接下来介绍傅里叶级数。先写出傅里叶级数的展开式：\n",
    "\n",
    "$$\n",
    "f(x)=a_0+a_1\\cos x+b_1\\sin x+a_2\\cos 2x+b_2\\sin 2x+\\cdots\n",
    "$$\n",
    "\n",
    "傅里叶发现，如同将向量$v$展开（投影）到向量空间的一组标准正交基中，在函数空间中，我们也可以做类似的展开。将函数$f(x)$投影在一系列相互正交的函数中。函数空间中的$f(x)$就是向量空间中的$v$；函数空间中的$1,\\cos x,\\sin x,\\cos 2x,\\sin 2x,\\cdots$就是向量空间中的$q_1,q_2,\\cdots,q_n$；不同的是，函数空间是无限维的而我们以前接触到的向量空间通常是有限维的。\n",
    "\n",
    "再来介绍何为“函数正交”。对于向量正交我们通常使用两向量内积（点乘）为零判断。我们知道对于向量$v,w$的内积为$v^Tw=v_1w_1+v_2w_2+\\cdots+v_nw_n=0$，也就是向量的每个分量之积再求和。而对于函数$f(x)\\cdot g(x)$内积，同样的，我们需要计算两个函数的每个值之积而后求和，由于函数取值是连续的，所以函数内积为：\n",
    "\n",
    "$$f^Tg=\\int f(x)g(x)\\mathrm{d}x$$\n",
    "\n",
    "在本例中，由于傅里叶级数使用正余弦函数，它们的周期都可以算作$2\\pi$，所以本例的函数点积可以写作$f^Tg=\\int_0^{2\\pi}f(x)g(x)\\mathrm{d}x$。我来检验一个内积$\\int_0^{2\\pi}\\sin{x}\\cos{x}\\mathrm{d}x=\\left.\\frac{1}{2}\\sin^2x\\right|_0^{2\\pi}=0$，其余的三角函数族正交性结果可以参考[傅里叶级数](https://zh.wikipedia.org/wiki/%E5%82%85%E9%87%8C%E5%8F%B6%E7%BA%A7%E6%95%B0)的“希尔伯特空间的解读”一节。\n",
    "\n",
    "最后我们来看$\\cos x$项的系数是多少（$a_0$是$f(x)$的平均值）。同向量空间中的情形一样，我们在等式两边同时做$\\cos x$的内积，原式变为$\\int_0^{2\\pi}f(x)\\cos x\\mathrm{d}x=a_1\\int_0^{2\\pi}\\cos^2x\\mathrm{d}x$，因为正交性等式右边仅有$\\cos x$项不为零。进一步化简得$a_1\\pi=\\int_0^{2\\pi}f(x)\\cos x\\mathrm{d}x\\rightarrow a_1=\\frac{1}{\\pi}\\int_0^{2\\pi}f(x)\\cos x\\mathrm{d}x$。\n",
    "\n",
    "于是，我们把函数$f(x)$展开到了函数空间的一组标准正交基上。"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.5.1"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}
